#!/bin/bash
#
# Trabajo Practico 1 Ejercicio 5
# Entrega número: 1
#
# - Integrantes:
#	- Martinez, Guillermo	DNI: 34510461
#	- Meli, Marcos		DNI: 31832759
#	- Reyes, Leandro	DNI: 34213699
#	- Rodriguez, Lucas	DNI: 34265017
#	- Cortez, Martin	DNI: 30440023
#

showError()
{
   echo "==> Error de sintaxis."
   echo "Sintaxis para obtener ayuda:"
   echo "   $0 -h"
}

checkError()
{
   if [ $1 -lt 1 ]
   then
      showError
      exit 1
   fi
  
   if [ $1 -eq 1 ] && ([ $2 = "-h" ] || [ $2 = "-?" ])
   then
      checkHelp $2
   fi
   
   test -f $2
   if test $? -ne 0
   then
      echo "El archivo que se intenta abrir no existe"
	  showError
	  exit 2
   fi 
}

showHelp()
{
   echo "==> Ayuda - $0"
   echo "Elimina comentarios de fuentes .cpp"
   echo " Sintaxis de ejecución:"
   echo "   $0 fuente_entrada"
   echo " Sintaxis para obtener ayuda:"
   echo "   $0 -h"
   echo " Sintaxis para obtener versión y ayuda:"
   echo "   $0 -?"
}

checkHelp()
{
   case $1 in
   -h)
      showHelp
   ;;
   -?)
      OpcionStandar
   ;;
   esac
   exit 0
}

OpcionStandar()
{ #Opción standard ‘-?’ que indica el número de versión y las formas de llamada.
   echo "$0 - Version 1.0"
   showHelp
}

# comienzo de programa, chequeo parametros
checkError $# $1

VAR="./fuente_`date +%d%b%H%M%S`.backup"

#Backup del archivo original
cp $1 $VAR
test -f $VAR
if test $? -ne 0
then
   echo "Error al crear backup de $1"; exit 3
fi

## tratamiento para:	/*____*/
#echo "unificamos la repetición del caracter '*' dentro del comentario a eliminar"
sed -e '/\/\*/,/\*\// s/\/\*\*/\/\* \*/g;s/\*\*\//\* \*\//g' < $1 > ./aux2.tmp
mv ./aux2.tmp ./aux.tmp
sed -e '/\/\*/,/\*\// s/\*\**\*/\*/g' < ./aux.tmp > ./aux2.tmp
mv ./aux2.tmp ./aux.tmp

#echo "si existieron '*' repetidos dentro de un /*___*/ elimino el '*' resultante"
sed -e '/\/\*/,/\*\// s/[^/]\*[^/]//g' < ./aux.tmp > ./aux2.tmp
mv ./aux2.tmp ./aux.tmp

#echo "eliminamos tranquilo todo lo !='*' en /*___*/"
sed -e 's/\/\*[^*]*\*\///g' < ./aux.tmp > ./aux2.tmp
mv ./aux2.tmp ./aux.tmp

#echo "Si verdaderamente es multilínea aislamos el comentario de la forma: \n/*___*/\n"
sed -e '/\/\*/,/\*\// s/\(\/\*\)/\n\1/g;s/\(\*\/\)/\1\n/g' < ./aux.tmp > ./aux2.tmp
mv ./aux2.tmp ./aux.tmp

#echo "eliminamos el comentario multilínea aislado"
sed -e'/\/\*/,/\*\//d' < ./aux.tmp > ./aux2.tmp
mv ./aux2.tmp ./aux.tmp

## tratamiento para:	//____
#echo "eliminamos todas las líneas que comienzen con // (incluso con ' ' y \t)"
sed -e '/^[ \t]*\/\//d' < ./aux.tmp > ./aux2.tmp
mv ./aux2.tmp ./aux.tmp

#echo "eliminamos el comentario // que no está como comienzo de línea"
sed -e 's/\/\/.*//g' < ./aux.tmp > ./aux2.tmp
mv ./aux2.tmp ./aux.tmp

#Modificamos el archivo original
mv ./aux.tmp $1

exit 0
#~ FIN DE ARCHIVO